]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
extensionSystem: Add kill-switch setting to disable user extensions
authorFlorian Müllner <fmuellner@gnome.org>
Mon, 14 Dec 2015 22:52:38 +0000 (23:52 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Wed, 15 Feb 2017 22:20:14 +0000 (23:20 +0100)
When gnome-shell fails to start on login, gnome-session tries to
re-launch it again with all extensions disabled. This is currently
implemented by clearing the list of enabled extensions, which means
the user needs to re-enable their extensions manually again.
To make this process less annoying, add a single 'kill-switch' setting
gnome-session can use without interfering with the user setting.

https://bugzilla.gnome.org/show_bug.cgi?id=778664

data/org.gnome.shell.gschema.xml.in
js/ui/extensionSystem.js

index c1e6b21daff6ba831459fb774b85b3252ac4221a..7348d090847ad15f69bd73b9bb141bcd8105d41a 100644 (file)
         EnableExtension and DisableExtension D-Bus methods on org.gnome.Shell.
       </description>
     </key>
+    <key name="disable-user-extensions" type="b">
+      <default>false</default>
+      <summary>Disable user extensions</summary>
+      <description>
+        Disable all extensions the user has enabled without affecting
+        the 'enabled-extension' setting.
+      </description>
+    </key>
     <key name="disable-extension-version-validation" type="b">
       <default>true</default>
       <summary>Disables the validation of extension version compatibility</summary>
index ba332220b2203f8c412aa1861e84f713d986f054..a4dc29eeab7efd6929bc9751b364376ecd91d2be 100644 (file)
@@ -38,6 +38,7 @@ const connect = Lang.bind(_signals, _signals.connect);
 const disconnect = Lang.bind(_signals, _signals.disconnect);
 
 const ENABLED_EXTENSIONS_KEY = 'enabled-extensions';
+const DISABLE_USER_EXTENSIONS_KEY = 'disable-user-extensions';
 const EXTENSION_DISABLE_VERSION_CHECK_KEY = 'disable-extension-version-validation';
 
 var initted = false;
@@ -238,11 +239,16 @@ function initExtension(uuid) {
 }
 
 function getEnabledExtensions() {
-    let extensions = global.settings.get_strv(ENABLED_EXTENSIONS_KEY);
-    if (!Array.isArray(Main.sessionMode.enabledExtensions))
+    let extensions;
+    if (Array.isArray(Main.sessionMode.enabledExtensions))
+        extensions = Main.sessionMode.enabledExtensions;
+    else
+        extensions = [];
+
+    if (global.settings.get_boolean(DISABLE_USER_EXTENSIONS_KEY))
         return extensions;
 
-    return Main.sessionMode.enabledExtensions.concat(extensions);
+    return extensions.concat(global.settings.get_strv(ENABLED_EXTENSIONS_KEY));
 }
 
 function onEnabledExtensionsChanged() {
@@ -288,6 +294,7 @@ function _onVersionValidationChanged() {
 
 function _loadExtensions() {
     global.settings.connect('changed::' + ENABLED_EXTENSIONS_KEY, onEnabledExtensionsChanged);
+    global.settings.connect('changed::' + DISABLE_USER_EXTENSIONS_KEY, onEnabledExtensionsChanged);
     global.settings.connect('changed::' + EXTENSION_DISABLE_VERSION_CHECK_KEY, _onVersionValidationChanged);
 
     enabledExtensions = getEnabledExtensions();